数据库函数

    我们会在每个函数的实例中使用下面的模型:

    1. name = models.CharField(max_length=50)
    2. age = models.PositiveIntegerField(null=True, blank=True)
    3. goes_by = models.CharField(max_length=50, null=True, blank=True)

    我们并不推荐在CharField上允许null=True,以后那位这会允许字段有两个“空值”,但是对于下面的Coalesce示例来说它很重要。

    class Coalesce(*expressions, **extra)[source]

    接受一个含有至少两个字段名称或表达式的列表,返回第一个非空的值(注意空字符串不被认为是一个空值)。每个参与都必须是相似的类型,所以掺杂了文本和数字的列表会导致数据库错误。

    使用范例:

    Concat

    class Concat(*expressions, **extra)[source]

    接受一个含有至少两个文本字段的或表达式的列表,返回连接后的文本。每个参数都必须是文本或者字符类型。如果你想把一个TextField()和一个CharField()连接, 一定要告诉Djangooutput_field应该为TextField()类型。在下面连接Value的例子中,这也是必需的。

    使用范例:

    1. >>> # Get the display name as "name (goes_by)"
    2. >>> from django.db.models import CharField, Value as V
    3. >>> from django.db.models.functions import Concat
    4. >>> Author.objects.create(name='Margaret Smith', goes_by='Maggie')
    5. >>> author = Author.objects.annotate(
    6. ... screen_name=Concat('name', V(' ('), 'goes_by', V(')'),
    7. ... output_field=CharField())).get()
    8. >>> print(author.screen_name)

    class Length(expression, **extra)[source]

    接受一个文本字段或表达式,返回值的字符个数。如果表达式是null,长度也会是null

    使用范例:

    Lower

    class Lower(expression, **extra)[source]

    接受一个文本字符串或表达式,返回它的小写表示形式。

    使用范例:

    1. >>> from django.db.models.functions import Lower
    2. >>> author = Author.objects.annotate(name_lower=Lower('name')).get()
    3. >>> print(author.name_lower)
    4. margaret smith

    返回这个字段或者表达式的,以pos位置开始,长度为length的子字符串。位置从下标为1开始,所以必须大于0。如果lengthNone,会返回剩余的字符串。

    使用范例:

    Upper

    class Upper(expression, **extra)[source]

    接受一个文本字符串或表达式,返回它的大写表示形式。

    使用范例:

    1. >>> from django.db.models.functions import Upper
    2. >>> Author.objects.create(name='Margaret Smith')
    3. >>> author = Author.objects.annotate(name_upper=Upper('name')).get()
    4. >>> print(author.name_upper)